LOAD:导入数据
- wiki语法
1
LOAD DATA [LOCAL] INPATH 'filepath' [OVERWRITE] INTO TABLE tablename [PARTITION (partcol1=val1, partcol2=val2 [...)]](https://cwiki.apache.org/confluence/display/Hive/...)])
- 数据准备
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15dept.txt
10 ACCOUNTING NEW YORK
20 RESEARCH DALLAS
30 SALES CHICAGO
40 OPERATIONS BOSTON
- 上传数据到hdfs上
hadoop fs -put dept.txt /hive/dept
- 先创建一个表
create table dept(
deptno int,
dname string,
location string
) row format delimited dields terminated by '\t';
关键字拓展1
2
3
4
5
6
7
8
9
10
11
12- 普通加载(从本地)
LOAD DATA LOCAL INPATH '/home/hadoop/data/dept.txt' OVERWRITE INTO TABLE dept;
- [LOCAL]:本地加载
使用了LOCAL关键字,会从linux目录上上传
不使用LOCAL,会从hdfs上加载数据
* 可以要注意,我们LOAD之后/hive/dept/dept.txt文件已经被移动了
LOAD DATA INPATH '/hive/dept/dept.txt' OVERWRITE INTO TABLE dept;
- [OVERWRITE]:覆盖加载
LOAD DATA LOCAL INPATH '/home/hadoop/data/dept.txt' OVERWRITE INTO TABLE dept;
INSERT INTO:插入数据到表中
wiki
1
2
3
4
5INSERT INTO TABLE tablename [PARTITION (partcol1[=val1], partcol2[=val2] ...)] VALUES values_row [, values_row ...]
Where values_row is:
( value [, value ...] )
where a value is either null or any valid SQL literal实践
1
2
3
4
5
6
7
8
9
10# 这里有关partition我们后面会讲到
insert into order_partition
partition(event_month='2014-07')
values
('1','4456515616'),
('1','4456515616');
# 根据查询条件进行插入
insert into emp_ex select * from emp_ex;
- 这里要注意查询的数据要和插入的表的数据一一对应拓展
1
2
3
4
5
6- 生产一般不采用insert的方式,因为每次insert都会产生小文件
- ETL:Extract-Transform-Load(萃取-转置-加载)
对源数据进行处理清洗,方便导入到数据仓库中的处理手段
我们会把源文件的ip,解析为省份 地市等信息 供数据仓库LOAD
INSERT OVERWRITE:导出数据
wiki
1
2
3
4
5INSERT OVERWRITE [LOCAL] DIRECTORY directory1
[ROW FORMAT row_format] [STORED AS file_format] (Note: Only available starting with Hive ``[0.11](https://cwiki.apache.org/confluence/display/Hive/0.11)``.``0``)
SELECT ... FROM ...关键字拓展
1
2
3
4
5
6- 案例语法
INSERT OVERWRITE LOCAL DIRECTORY '/home/hadoop/tmp/d6/emptmp'
row format delimited fields terminated by ','
SELECT empno,ename FROM emp;
- [LOCAL]:导出到本地,不带的时候默认导出到hdfs中
SELECT :查询数据
- hiveSQL的一些基础用法我们可以沿用SQL语法,这里我们讲一些特殊的情况
- 会触发mr的动作
1
2
3
4
5order by 和 group by都会触发mr动作,还有我们之前提到的insert
hive> select * from emp order by empno desc;
hive> select deptno from emp group by deptno;
- 这就是为什么我们在做案例的时候,触发了两个mr动作的原因
常用函数
学之前我们先学一下怎么查询一个函数是怎么使用的
1
2hive> desc function parse_url;
parse_url(url, partToExtract[, key]) - extracts a part from a URLparse_url:解析url
1
2
3
4
5
6
7
8
9
10
11- 解析host
hive> select parse_url('https://cwiki.apache.org/confluence/display/Hive/LanguageManual','HOST');
cwiki.apache.org
- 解析路径
hive> select parse_url('https://cwiki.apache.org/confluence/display/Hive/LanguageManual','PATH');
/confluence/display/Hive/LanguageManual
- 解析协议
hive> select parse_url('https://cwiki.apache.org/confluence/display/Hive/LanguageManual','PROTOCOL');
httpsconcat and concat_wa:字符串拼接
1
2
3
4
5
6
7- 字符串拼接,含分隔符
hive> select concat_ws('-','beijing','haidian');
beijing-haidian
- 字符串拼接
hive> select concat('beijing','-','haidian');
beijing-haidian时间函数:unix_timestamp 和 from_unixtime
1
2
3
4
5
6
7- 获取当前时间戳
hive> select unix_timestamp();
1552982465
- 根据时间戳进行格式转换
hive> select from_unixtime(unix_timestamp(),'yyyy-MM-dd HH:mm:ss');
2019-03-19 01:01:52lpad:左补齐
1
2hive> select lpad('ab',8,'*');
******abtrim:清除两遍的空格
1
2hive> select trim(' aasd ');
aasdlength:查看当前字符串的数量
1
2hive> select length('qwe');
3if:判断语句
1
2
3
4
5
6hive> select if(1=1,'yes','no');
yes
Time taken: 0.255 seconds, Fetched: 1 row(s)
hive> select if(1!=1,'yes','no');
no
Time taken: 0.133 seconds, Fetched: 1 row(s)
小知识点
1 | null |